package 数组算法;

import java.util.ArrayList;
import java.util.List;

public class subsets78 {

    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> lists = new ArrayList<>();
        // 添加一个空的数组
        lists.add(new ArrayList<>());
        // 遍历数组
        for (int num : nums) {
            //每遍历一个元素就在之前子集中的每个集合追加这个元素，让他变成新的子集
            for (int i = 0; i < lists.size(); i++) {
                List<Integer> list = new ArrayList<>(lists.get(i));
                list.add(num);
                lists.add(list);
            }
        }
        return lists;
    }

    public List<List<Integer>> subsetsV2(int[] nums) {
        List<List<Integer>> lists = new ArrayList<>();
        lists.add(new ArrayList<>());
        for (int num : nums) {
            for (int i = 0; i < lists.size(); i++) {
                // 获取每一个list的数组
                List<Integer> list = new ArrayList<>(lists.get(i));
                // 添加当前的元素
                list.add(num);
                // 然后再添加回去
                lists.add(list);
            }
        }
        return lists;
    }
}
